import { is, optimizer } from '@electron-toolkit/utils';
import { app, BrowserWindow, shell } from 'electron';
import { join } from 'node:path';
import icon from '../../resources/icon.png?asset';
import { ipcManager } from '../preload/Ipc-Manager';

function createWindow(){
  // 创建浏览器窗口
  const mainWindow = new BrowserWindow( {
    icon,
    width: 1098,
    height: 880, // 窗口图标，build后正常显示
    // alwaysOnTop: true, // 始终置顶
    autoHideMenuBar: true, // 默认false，是否隐藏菜单
    webPreferences: {
      preload: join( __dirname, '../preload/index.js' ) // 预加载脚本
    }
  } );
  // 监听 mainWindow 的 'ready-to-show' 事件
  mainWindow.on( 'ready-to-show', () => {
    // 当窗口准备好显示时，显示 mainWindow 窗口
    mainWindow.show();
  } );
  
  // 设置 mainWindow 的窗口打开处理器
  mainWindow.webContents.setWindowOpenHandler( ( details ) => {
    // 使用 shell 模块打开外部链接
    shell.openExternal( details.url );
    // 返回一个对象，其中 action 属性设置为 'deny'，表示拒绝打开新窗口
    return { action: 'deny' };
  } );
  
  // 基于electronic-vite-cli的渲染器HMR，加载用于开发的远程URL或用于生产的本地html文件
  if( is.dev && process.env.ELECTRON_RENDERER_URL ){
    mainWindow.loadURL( process.env.ELECTRON_RENDERER_URL );
  }
  else{
    mainWindow.loadFile( join( __dirname, '../renderer/index.html' ) );
  }
  
  // 初使化IPC
  ipcManager( mainWindow );
  // 开发环境打开DevTools
  process.env.NODE_ENV === 'development' && mainWindow.webContents.openDevTools( { mode: 'bottom' } );
}


// 当Electron完成时，将调用此方法初始化并准备创建浏览器窗口，某些API只能在此事件发生后使用
app.whenReady().then( () => {
  // 为windows设置应用程序用户模型id
  app.setAppUserModelId( 'com.electron' );
  
  // 开发中默认按F12打开或关闭DevTools，在生产中忽略CommandOrControl+R
  app.on( 'browser-window-created', ( _, window ) => {
    optimizer.watchWindowShortcuts( window );
  } );
  
  createWindow();
  
  app.on( 'activate', () => {
    // 仅当没有任何窗口打开时，才新建窗口（主要针对macOS的应用隐藏）
    if( BrowserWindow.getAllWindows().length === 0 ){
      createWindow();
    }
  } );
} );

// macOS设置所有窗口后退出应用（macOS默认只是隐藏应用）
app.on( 'window-all-closed', () => {
  if( process.platform !== 'darwin' ){
    app.quit();
  }
} );
